Checking equivalence in a non-strict language
نویسندگان
چکیده
Program equivalence checking is the task of confirming that two programs have same behavior on corresponding inputs. We develop a calculus based symbolic execution and coinduction to check in non-strict functional language. Additionally, we show our can be used derive counterexamples for pairs inequivalent programs, including arise from non-termination. describe fully automated approach finding both proofs counterexamples. Our implementation, Nebula, proves equivalences written Haskell. demonstrate Nebula's practical effectiveness at proving producing automatically by applying Nebula existing benchmark properties.
منابع مشابه
Semantics of Barriers in a Non-strict, Implicitly-parallel Language Semantics of Barriers in a Non-strict, Implicitly-parallel Language
Barriers in parallel languages may be used to schedule parallel activities, control memory usage and ensure proper sequentialization of side-eeects. In this paper we present operational semantics of barriers in Id and pH, which are non-strict, implicitly-parallel, functional languages extended with side-eeects. The semantics are presented as a translation from a source language with barriers in...
متن کاملTransformation in a Non-Strict Language: An Approach to Instantiation
A problem arises when the usual rules of fold/unfold transformation are applied in a non–strict programming system. Case analysis by instantiation may alter strictness characteristics of the function being transformed, and hence alter the behaviour of programs. Although such behavioural changes can in general be quite subtle, they are all too apparent if the program is interactive, since I/O in...
متن کاملOn the non-equivalence of weak and strict preference
Rechenauer (2008) claims that weak preference is a better starting point for preference relations than strict preferences. This contention is challenged. Definitional connections between weak and strict preference are suggested that lead to the opposite conclusion. This is not taken as a justification of the superiority of strict over weak preference as the primitive preference relation, but ju...
متن کاملVectorising a non-strict data-parallel functional language
The role of a vectorising compiler for an imperative language is to transform the for-loops of a program into the vector instructions of a data-parallel machine. In a functional language, constant complexity map is the essence of data-parallelism, where a function is applied to every element of a data-structure all at the same time. As map can be considered to be an abstraction of an imperative...
متن کاملMiranda: A Non-Strict Functional language with Polymorphic Types
data types Many of the data types which in other languages would have to be expressed as abstract data types can be represented in Miranda as algebraic data types with associated laws. Nevertheless there is still a need for abstract data types, as may be seen from the following example (which is based on a use of abstract data types in the LCF system [Gordon et al 79]).
متن کاملذخیره در منابع من
با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید
ژورنال
عنوان ژورنال: Proceedings of the ACM on programming languages
سال: 2022
ISSN: ['2475-1421']
DOI: https://doi.org/10.1145/3563340